iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0
AI & Data

30天零基礎學習網路爬蟲系列 第 29

實作-Excel VBA 爬取Yahoo股市網站(下)

  • 分享至 

  • xImage
  •  

我們已經認識了要爬取的網頁架構之後,就可以開始使用Excel的VBA來寫程式將資料抓取下來,今天的程式會引用IE物件,來取得HTML網頁元素

Sub Yahoo股市()
    ‘清除工作表裡的所有資料
    Cells.Clear
    
    ‘建立Internet Explorer (IE) 物件
    Set ie = CreateObject("internetexplorer.application")
    ‘指定的網頁連結
    ie.navigate "https://tw.stock.yahoo.com/class-quote?sectorId=3&exchange=TAI"
    
    ‘設定暫停(延遲)時間,等待網頁下載完成
    Application.Wait (Now + TimeValue("0:00:03"))
    ‘設定工作表中的欄位名稱
    Range("A1") = "股票名稱": Range("B1") = "代號": Range("C1") = "股價"
    Range("D1") = "漲跌": Range("E1") = "漲跌幅(%)": Range("F1") = "開盤"
    Range("G1") = "昨收": Range("H1") = "最高": Range("I1") = "最低"
    Range("J1") = "成交量(張)": Range("K1") = "時間"

    ‘使用getElementsByTagName方法獲取<ul>元素
    Set UL = ie.document.getElementsByTagName("ul")(21)
    
    ‘使用getElementsByTagName方法獲取<ul>元素中的所有<li>元素
    Set LI = UL.getElementsByTagName("li")

    ‘使用回圈遍歷<li>,取得儲存格裡的每個內容<div>
    For i = 0 To LI.Length - 1
        Set DIV = LI(i).getElementsByTagName("div")
        k = 1

        ‘從<div>中獲取數據,填入工作表
        For j = 5 To DIV.Length - 1
            If j <> 5 = True Then
                Cells(i + 2, k) = DIV(j).innertext
                k = k + 1
            End If
        Next
    Next

    ‘自動調整欄位寬度
    Columns.AutoFit

    ‘關閉IE物件
    ie.Quit
Sub Yahoo股市()

可以在工作表中,新增按鈕控制項,記得指定巨集,之後只要點擊按鈕就能更新到最新資訊。
https://ithelp.ithome.com.tw/upload/images/20230928/20161776VOpz83eOUO.png
(資料擷取時間:2023/09/15)


參考資料
https://zanzan.tw/archives/4659
https://www.w3schools.com/jsref/met_document_getelementsbytagname.asp
https://www.youtube.com/watch?v=lLbXKqcmV60&t=443s
https://youtu.be/GZsCZ7JYJHE?si=K46KBAchsoAHSpBv


上一篇
實作-Excel VBA 爬取Yahoo股市網站(中)
下一篇
結語
系列文
30天零基礎學習網路爬蟲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
alexlkklin
iT邦新手 5 級 ‧ 2023-11-07 15:47:56

您好,
感謝您的程式,謝謝.

個人在引用時只會匯入欄位名稱,
各股的資料沒有匯入,
請問是那邊出錯了,
在YAHOO的網頁查詢程式時和您貼文上的不一樣,
不知是否是YAHOO的程式變更?
謝謝.

我要留言

立即登入留言